from datetime import datetime

from pytz import timezone


def get_date_time(
    tz: str = "Europe/Moscow", time_format="%Y-%m-%d %H:%M:%S", as_string: bool = False
):
    """Получаем текущую дату и время"""

    date_and_time = (
        datetime.now(timezone(tz)).replace(tzinfo=None).replace(microsecond=0)
    )

    if as_string:
        date_and_time = date_and_time.strftime(time_format)

    return date_and_time


def format_date(date_string: str):
    """Форматируем дату в формате 03 JAN / JAN 20"""

    dict_date = {
        "01": "JAN /JAN",
        "02": "FEB /FEV",
        "03": "MAR /MAR",
        "04": "APR /AVR",
        "05": "MAY /MAI",
        "06": "JUN /JUI",
        "07": "JUL /JUI",
        "08": "AUG /AOU",
        "09": "SEP /SEP",
        "10": "OCT /OCT",
        "11": "NOV /NOV",
        "12": "DEC /DEC",
    }

    return " ".join([date_string[:2], dict_date[date_string[3:5]], date_string[8:10]])


def change_date_string_format(
    date_str: str, format_in: str = "%d.%m.%Y", format_out: str = "%d %b %Y"
) -> str:
    """
    Преобразуем формат строки времени
    @param date_str: Строка времени
    @param format_in: Формат исходной строки
    @param format_out: Формат конечной строки
    """

    return datetime.strptime(date_str, format_in).strftime(format_out).upper()
